﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Modelo
{
    [Serializable]
    public abstract class Enemigo : Personaje
    {
        protected int resistencia;
        protected Conducta comportamiento;
        protected int ultDirX;
        protected int ultDirY;

        public Enemigo(Posicion posInicial, int tamanio, Mapa mapaCreador)
            : base(posInicial, tamanio, mapaCreador) { }

        public void decidirProximaAccion()
        {
            //Funcion que se debe usar para que el enemigo se mueva o plante una bomba.
            comportamiento.decidirAccion(this);
        }

        public int obtenerResistencia()
        {
            return resistencia;
        }

        public void restarResistencia(int resistenciaARestar)
        {
            resistencia -= resistenciaARestar;
            if (resistencia <= 0)
            {
                mapa.eliminarEnemigoDestruido(this);
            }
        }

        public abstract void movimientoAI();

        public int getUltDirX()
        {
            return ultDirX;
        }

        public int getUltDirY()
        {
            return ultDirY;
        }

        #region IColisionable Member

        public override void recibirColision(IColisionable elOtro)
        {
            elOtro.manejarColisionCon(this);
        }

        public override void manejarColisionCon(Bombita elOtro)
        {
            elOtro.manejarColisionCon(this);//Llamo al manejar de bombita para no repetir lo mismo.
        }

        public override void manejarColisionCon(Enemigo elOtro)
        {
            //No pasa nada si chocan
        }

        public override void manejarColisionCon(PowerUp elOtro)
        {
            //No pasa nada porque no pueden agarrarlos.
        }

        public override void manejarColisionCon(Bomba elOtro)
        {
            //No puede caminar sobre la bomba
        }

        #endregion
    }
}
